#!/bin/bash

# 零售中台系统API连接测试脚本
# 用于验证API是否可用，方便Postman测试前的预检查

echo "=========================================="
echo "    零售中台系统API连接测试"
echo "=========================================="

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 默认配置
BASE_URL="http://localhost:8080/retail-admin"
API_BASE_URL="http://localhost:8080/retail-admin/api"
FRONTEND_URL="http://localhost:3000"

# 测试函数
test_endpoint() {
    local url=$1
    local name=$2
    local expected_status=${3:-200}
    
    echo -n "测试 $name: "
    
    response=$(curl -s -o /dev/null -w "%{http_code}" "$url" 2>/dev/null)
    
    if [ "$response" = "$expected_status" ]; then
        echo -e "${GREEN}✓${NC} 成功 (状态码: $response)"
        return 0
    else
        echo -e "${RED}✗${NC} 失败 (状态码: $response)"
        return 1
    fi
}

# 测试API响应内容
test_api_response() {
    local url=$1
    local name=$2
    
    echo -n "测试 $name 响应内容: "
    
    response=$(curl -s "$url" 2>/dev/null)
    
    if echo "$response" | grep -q "status"; then
        echo -e "${GREEN}✓${NC} 响应格式正确"
        return 0
    else
        echo -e "${RED}✗${NC} 响应格式错误"
        return 1
    fi
}

# 主测试函数
main() {
    echo -e "\n${YELLOW}=== 开始API连接测试 ===${NC}"
    
    local all_tests_passed=true
    
    # 测试后端健康检查
    if ! test_endpoint "$BASE_URL/actuator/health" "后端健康检查"; then
        all_tests_passed=false
    fi
    
    # 测试API文档
    if ! test_endpoint "$BASE_URL/doc.html" "API文档页面"; then
        all_tests_passed=false
    fi
    
    # 测试前端页面
    if ! test_endpoint "$FRONTEND_URL" "前端页面"; then
        all_tests_passed=false
    fi
    
    # 测试产品API
    if ! test_endpoint "$API_BASE_URL/product/page?pageNum=1&pageSize=10" "产品列表API"; then
        all_tests_passed=false
    fi
    
    echo -e "\n${YELLOW}=== 测试响应内容 ===${NC}"
    
    # 测试健康检查响应内容
    test_api_response "$BASE_URL/actuator/health" "健康检查"
    
    echo -e "\n${YELLOW}=== 测试结果 ===${NC}"
    
    if [ "$all_tests_passed" = true ]; then
        echo -e "${GREEN}🎉 所有API测试通过！${NC}"
        echo -e "${BLUE}可以开始使用Postman进行API测试了${NC}"
    else
        echo -e "${RED}⚠️  部分API测试失败，请检查服务状态${NC}"
        echo -e "${YELLOW}建议检查：${NC}"
        echo "1. 后端服务是否启动: lsof -i :8080"
        echo "2. 前端服务是否启动: lsof -i :3000"
        echo "3. 数据库是否运行: docker ps | grep mysql"
    fi
    
    echo -e "\n${BLUE}=== Postman测试配置 ===${NC}"
    echo "基础URL: $BASE_URL"
    echo "API URL: $API_BASE_URL"
    echo "前端URL: $FRONTEND_URL"
    
    echo -e "\n${BLUE}=== 快速启动命令 ===${NC}"
    echo "启动后端: cd backend/retail-admin && mvn spring-boot:run"
    echo "启动前端: cd frontend/admin && npm run dev"
    echo "启动数据库: docker run -d --name retail-mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=retail_platform -p 3306:3306 mysql:8.0"
}

# 显示帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  -u, --url      指定基础URL (默认: http://localhost:8080/retail-admin)"
    echo ""
    echo "示例:"
    echo "  $0                    # 使用默认URL测试"
    echo "  $0 -u http://test.com # 使用自定义URL测试"
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            show_help
            exit 0
            ;;
        -u|--url)
            BASE_URL="$2"
            API_BASE_URL="$2/api"
            shift 2
            ;;
        *)
            echo "未知选项: $1"
            show_help
            exit 1
            ;;
    esac
done

# 执行主函数
main
